home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / c / tkalgebra / example / example.cpp next >
Text File  |  1999-12-06  |  3KB  |  148 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #include "macierz.h"
  6. #include "uklad.h"
  7.  
  8. #ifdef AMIGA
  9. #define clrscr(); printf("\f");
  10. #else
  11. #include <conio.h>
  12. #endif
  13.  
  14.  
  15.  
  16. int Men1()
  17. {  int i;
  18.     clrscr();
  19.     printf("\t1 - Metoda Gaussa\n");
  20.     printf("\t2 - Ortogonalizacja Gramma Schmidta\n");
  21.     printf("\t3 - Automatycznie\n");
  22.     printf("\t4 - Odwracanie macierzy\n");
  23.     printf("\t5 - Generuj nowa macierz\n");
  24.     printf("\t6 - Wyjscie z programu\n\n");
  25.     printf("\t\ttwoj wybor? ");
  26.     scanf("%d",&i);
  27.     return (i%6);
  28. }
  29. int Men2()
  30. {  int i;
  31.     clrscr();
  32.     printf("\t1 - Metoda Gaussa\n");
  33.     printf("\t2 - Ortogonalizacja Gramma Schmidta\n");
  34.     printf("\t3 - Automatycznie\n");
  35.     printf("\t4 - Generuj nowa macierz\n");
  36.     printf("\t5 - Wyjscie z programu\n\n");
  37.     printf("\t\ttwoj wybor? ");
  38.     scanf("%d",&i);
  39.     return (i+(i>3))%6;
  40. }
  41.  
  42. int (*menu_glowne[2])()={Men1,Men2};
  43.  
  44.  
  45. Macierz TworzM()
  46. {  long int i,j;
  47.     int r1,r2;
  48.     do
  49.     {  printf("Podaj ilo¶æ kolumn macierzy:");
  50.         scanf("%d",&r1);
  51.         printf("Podaj ilo¶æ wierszy macierzy:");
  52.         scanf("%d",&r2);
  53.     }
  54.     while((r1<=0)||(r2<=0));
  55.     i=time(NULL);
  56.     srand(i);
  57.     Macierz Ax(r2,r1);
  58.     if(Ax.Bledy==BEZ_BLEDU)
  59.     {  for(j=0;j<r2;j++)
  60.         {  for(i=0;i<r1;i++)
  61.                 Ax[j][i]=((rand()%400));//-(rand()%800));//+(rand()/RAND_MAX));
  62.         }
  63.     }
  64.     return Ax;
  65. }
  66.  
  67. Wektor TworzW(Macierz &A)
  68. {  long int i,j;
  69.     i=time(NULL);
  70.     double pom;
  71.     srand(i);
  72.     Wektor Bx(A.Ile_Wierszy);
  73.     if(Bx.Bledy==BEZ_BLEDU)
  74.     {  for(j=0;j<A.Ile_Wierszy;j++)
  75.         {  pom=0;
  76.             for(i=0;i<A.Ile_Kolumn;i++)
  77.                 pom+=A[j][i];
  78.             Bx[j]=pom;//((rand()%4000));
  79.         }
  80.     }
  81.     return Bx;
  82. }
  83.  
  84. int main()
  85. {  Macierz A,*C=new Macierz();
  86.     Wektor B;
  87.     Uklad *U=NULL;
  88.     double WarPom;
  89.     int war=5;
  90.     do
  91.     {  switch(war)
  92.         {  case 1 : if(U)
  93.                             delete U;
  94.                         U=RozwiazanieUkladu(A,B,GAUSS_);
  95.                         break;
  96.             case 2 : if(U)
  97.                             delete U;
  98.                         U=RozwiazanieUkladu(A,B,ORTOGONALIZACJAGS_);
  99.                         break;
  100.             case 3 : if(U)
  101.                             delete U;
  102.                         U=RozwiazanieUkladu(A,B);
  103.                         break;
  104.             case 4 : delete C;
  105.                         C=A.Odwrotna();
  106.                         break;
  107.             case 5 : A=TworzM();
  108.                         if(A.Bledy==BEZ_BLEDU)
  109.                             B=TworzW(A);
  110.                         break;
  111.             default: break;
  112.         }
  113.         if((war<4)&&U)
  114.         {  if(U->Bledy==BEZ_BLEDU)
  115.             {  printf("\nMaxymalny maxymalny b³±d rozwiazania ukladu %d równañ z %d niewiadomymi wynosi %g\n",A.Ile_Wierszy,A.Ile_Kolumn,U->ERR);
  116.                 printf("Sredni b³±d natomiast: %g \n",U->SrBlad);
  117.                 U->x->Print();
  118.                 printf("\nCzas obliczeñ: %f",U->Czas);
  119.             }
  120.             else
  121.                 printf("\n\apodczas obliczeñ wyst±pi³ b³±d nr: %d",U->Bledy);
  122.             getchar();
  123.             getchar();
  124.         }
  125.         if(war==4)
  126.         {  if(C->Bledy==BEZ_BLEDU)
  127.             {  WarPom=DokladnoscMO(*C,A);
  128.                 printf("\nMaxymalny b³±d przy odwracaniu macierzy rzêdu %d wynosi %f\n",A.Ile_Wierszy,WarPom);
  129.                 
  130.             }
  131.             else
  132.                 printf("\n\apodczas obliczeñ wyst±pi³ b³±d nr: %d",C->Bledy);
  133.             getchar();
  134.             getchar();
  135.         }
  136.         if((B.Bledy==A.Bledy)&&(A.Bledy==BEZ_BLEDU))
  137.             war=menu_glowne[A.Ile_Kolumn!=A.Ile_Wierszy] ();
  138.         else
  139.             war=0;
  140.     }
  141.     while(war);
  142.     delete C;
  143.     if(U)
  144.         delete U;
  145.     return 0;
  146. }
  147.  
  148.